/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Dao.DaoChofer;
import Dao.DaoSocio;
import Modelo.Chofer;
import Vista.JFrameChoferes;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorChoferes implements ActionListener, KeyListener {

    private boolean Existe;

    private JFrameChoferes formChoferes;

    public ControladorChoferes() throws SQLException {
        formChoferes = new JFrameChoferes();
        formChoferes.agregarListener(this, this);
        formChoferes.setVisible(true);
        Enabled(false);
        LlenarComboSocio();

        formChoferes.getTxtCedulaCh().addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                CedulaKeyTyped(e);
            }

            public void keyPrssed(KeyEvent e) {
                CedulaKeyTyped(e);
            }
        });

    }

    //-----------------------------------------
    //Funciona cuando se hace click en un boton
    //------------------------------------------
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formChoferes.getBtnSalirCH())) {
            formChoferes.dispose();
        }

        if (e.getSource().equals(formChoferes.getBtnBuscarCH())) {
            try {
                new ControladorConsulChoferes();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorChoferes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formChoferes.getBtnGuardarCH())) {
            Grabar();
        }
        if (e.getSource().equals(formChoferes.getBtnEliminarCH())) {
            Limpiar();
            Enabled(false);
        }
        if (e.getSource().equals(formChoferes.getCmbSocios())) {
            try {
                combosocios();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorChoferes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    //------------------------------------------------------------
    //Funciona cuando se introduce un caracter en una caja de texto
    //-------------------------------------------------------------
    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {
            CedulaKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtNombreCh())) {
            NombresKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtTelefonoCh())) {
            TelefonoKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtDireccionCh())) {
            DireccionKeyTyped(e);
        }
    }

    //-------------------------------------------------------------------------------
    //Funciona cuando se presiona una tecla que realiza alguna funcion, Ejemplo Enter
    //-------------------------------------------------------------------------------
    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {
            try {
                CedulakeyPressed(e);
            } catch (SQLException ex) {
                Logger.getLogger(ControladorChoferes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formChoferes.getTxtNombreCh())) {
            NombreskeyPressed(e);
        }
        if (e.getSource().equals(formChoferes.getTxtDireccionCh())) {
            DireccionkeyPressed(e);
        }
    }

    //----------------------------------------------
    //Funciona cuando se suelta una tecla
    //----------------------------------------------
    @Override
    public void keyReleased(KeyEvent e) {

    }

    //----------------------------------  
    //Hacer editables las cajas de texto
    //----------------------------------
    private void Enabled(boolean Status) {
        formChoferes.getTxtCedulaCh().setEnabled(!Status);
        formChoferes.getTxtNombreCh().setEnabled(!Status);
        formChoferes.getTxtDireccionCh().setEnabled(!Status);
        formChoferes.getTxtTelefonoCh().setEnabled(!Status);
    }

    //-----------------------------------------
    //Limpia el contenido de las cajas de texto
    //------------------------------------------
    private void Limpiar() {
        Existe = false;
        formChoferes.getTxtCedulaCh().setText("");
        formChoferes.getTxtNombreCh().setText("");
        formChoferes.getTxtDireccionCh().setText("");
        formChoferes.getTxtTelefonoCh().setText("");
        formChoferes.getTxtCISocio().setText("");
        formChoferes.getTxtCodCoop().setText("");
        formChoferes.getCmbSocios().setSelectedIndex(-1);
    }

    //-----------------------------------------------
    //Ingresa un nuevo chofer en la lista de choferes
    //------------------------------------------------
    private void Grabar() {
        Chofer choferes = new Chofer();
        String Cadena;

        Cadena = formChoferes.getTxtCedulaCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Cedula Vacia", "");
            formChoferes.getTxtCedulaCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtNombreCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Nombre Vacio", "");
            formChoferes.getTxtNombreCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtDireccionCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Direccion Vacia", "");
            formChoferes.getTxtDireccionCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtTelefonoCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Telefono vacio", "");
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            return;
        }
        if (Cadena.length() != 11) {
            Mensajes.Aviso("Telefono invalido", "");
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            return;

        }
        Cadena = formChoferes.getTxtCISocio().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("CI Socio vacia", "");
            formChoferes.getCmbSocios().requestFocusInWindow();
            return;
        }
        Cadena = formChoferes.getTxtCodCoop().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Codigo de Cooperativa vacio", "");
            formChoferes.getCmbSocios().requestFocusInWindow();
            return;
        }

        choferes.Choferes(formChoferes.getTxtCedulaCh().getText(),
                formChoferes.getTxtNombreCh().getText(),
                formChoferes.getTxtDireccionCh().getText(),
                formChoferes.getTxtTelefonoCh().getText(),
                formChoferes.getCmbSocios().getSelectedItem().toString(),
                formChoferes.getTxtCodCoop().getText());
        DaoChofer daoChofer = new DaoChofer();

        if (Existe) {
            daoChofer.ModificarChofer(choferes);
        }

        Existe = false;
        daoChofer.IncluirChofer(choferes);
        Mensajes.Aviso("Chofer guardado con exito", "");
        Limpiar();
        Enabled(false);
        formChoferes.getTxtCedulaCh().requestFocusInWindow();
    }
    //---------------------------------------------
    //Llena el combo de los socios
    //---------------------------------------------
    private void LlenarComboSocio() throws SQLException 
     {
         String ced;
         ResultSet rgSocio;
         DaoSocio daoSocio = new DaoSocio();
         rgSocio = daoSocio.ConsultarSocio();//estoy viendo porque sale esto
         int fila = 0;
         while (rgSocio.next())
         {
             ced = rgSocio.getString("cedula");
             formChoferes.getCmbSocios().addItem(ced);
             fila++;
         }
     }

    //----------------------------------------------------------------------------
    //Se activa al hacer click en el combo y llena los txt de ciSocio y Cod Coop
    //---------------------------------------------------------------------------

    private void combosocios() throws SQLException
    {
        String cadena,nombre,coop;
        ResultSet rgSocio;
        DaoSocio daoSocio = new DaoSocio();
        rgSocio = daoSocio.ConsultarSocio();
        if(formChoferes.getCmbSocios().getSelectedIndex()==-1)
        {
            return;
        }
        cadena = formChoferes.getCmbSocios().getSelectedItem().toString();
        while(rgSocio.next())
        {
            if (rgSocio.getString("cedula").equals(cadena))
            {
                nombre = rgSocio.getString("nombre");
                coop = rgSocio.getString("codigocooperativa");
                formChoferes.getTxtCISocio().setText(nombre);
                formChoferes.getTxtCodCoop().setText(coop);
            }
        }
    }
            
    //---------------------------------------------------------------
    //Verifica si existe la cedula del chofer en la lista de choferes
    //----------------------------------------------------------------
   /* public int ExisteChofer(String CedCho) {
     int i = 0, Posi = -1;

     Chofer chofer;
     String CedLista;

     for (i = 0; i < list.getListaChoferes().size(); i++) {
     chofer = list.getListaChoferes().get(i);

     CedLista = chofer.getCedula();

     if (CedLista.equals(CedCho)) {
     Posi = i;
     return Posi;
     }

     }

     return Posi;
     }*/
                    //-----------------------------------------
    //Metodos que validan las cajas de texto
    //Serán llamados en los @Overwrite
    //------------------------------------------
    //-------------------------------------
    //Validaciones
    //-------------------------------------

    private void CedulaKeyTyped(KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getTxtCedulaCh().getText();
        if (Cadena.length() == 8) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void CedulakeyPressed(KeyEvent e) throws SQLException {
        ResultSet registroChofer;
        DaoChofer daoChofer = new DaoChofer();

        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {

            String Cadena;
            int PosiChofer;

            Cadena = formChoferes.getTxtCedulaCh().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 8) {
                Mensajes.Aviso("Cedula invalida", "");
                formChoferes.getTxtCedulaCh().requestFocusInWindow();
            }

            Existe = false;
            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 8) {

                registroChofer = daoChofer.BuscarChofer(Cadena);

                if (registroChofer.next()) {
                    Existe = true;
                    formChoferes.getTxtNombreCh().setText(registroChofer.getString("nombres"));
                    formChoferes.getTxtDireccionCh().setText(registroChofer.getString("direccion"));
                    formChoferes.getTxtTelefonoCh().setText(registroChofer.getString("telefono"));

                    Cadena = registroChofer.getString("ci_socio");
                    formChoferes.getCmbSocios().setSelectedItem(Cadena);

                    Mensajes.Aviso("Chofer ya Existe", "");
                    Enabled(true);
                    formChoferes.getTxtNombreCh().requestFocusInWindow();
                    return;
                } else {
                    //Enabled(true);
                    formChoferes.getTxtNombreCh().requestFocusInWindow();

                }
            }

        }
    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void NombresKeyTyped(KeyEvent evt) {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formChoferes.getTxtNombreCh().getText();
        if (Cadena.length() == 20) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }

    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void NombreskeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getTxtDireccionCh().requestFocusInWindow();
        }
    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void TelefonoKeyTyped(KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getTxtTelefonoCh().getText();
        if (Cadena.length() == 11) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void TelefonokeyPressed(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getTxtTelefonoCh())) {

            String Cadena;
            Cadena = formChoferes.getTxtCedulaCh().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 11) {
                Mensajes.Aviso("Telefono invalido", "");
                formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            }
            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 11) {
                formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            }
        }
    }

    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void DireccionkeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
        }
    }

    //-------------------------------------
    private void DireccionKeyTyped(KeyEvent evt) {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formChoferes.getTxtDireccionCh().getText();
        if (Cadena.length() == 30) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }

    }
    //-------------------------------------
}
